﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NetFrameworkExtensions.DataLayer
{
  public interface IProjectFramedData
  {
    object ProjectId { get; set; }
  }

  public interface IRequiredProjectData :
    IProjectFramedData
  {
  }

  public interface IOptionalProjectData :
    IProjectFramedData
  {
  }

  public interface IRequiredProjectData<TProjectIdentifier> :
    IRequiredProjectData
    where TProjectIdentifier : IEquatable<TProjectIdentifier>
  {
    new TProjectIdentifier ProjectId { get; set; }
  }

  public interface IOptionalProjectData<TProjectIdentifier> :
    IOptionalProjectData
    where TProjectIdentifier : class, IEquatable<TProjectIdentifier>
  {
    new TProjectIdentifier ProjectId { get; set; }
  }

  public interface INullableProjectData<TProjectIdentifier> :
    IOptionalProjectData
    where TProjectIdentifier : struct, IEquatable<TProjectIdentifier>
  {
    new TProjectIdentifier? ProjectId { get; set; }
  }
}
